package com.lry.basic.jvm.clinit;

/**
 * @author:刘仁有
 * @desc:
 * 准备阶段是正式为类变量分配内存和设置初始值的阶段 static 方法区
 * 实例变量随着对象实例化一起分配在java堆
 * clinit：类构造器，由类变量的赋值动作和静态语句块 合并而成
 * 合并的顺序取决于代码书写顺序
 * 静态语句块只能访问到定义在静态语句之前的类变量，定义在他之后的类变量，可以赋值，不可以访问
 * init：实例构造器
 *
 *  执行接口的clinit不需要先执行父接口的clinit，只有当需要使用父接口的static变量才会初始化父接口clinit
 *  接口的实现类在初始化时也不会执行接口的clinit
 * @email:953506233@qq.com
 * @data:2019/12/4
 */
public class ClInit {
    static int i=1;
    static{
        i=2;
        System.out.println(i);
        j=1;
        //System.out.println(j);//非法向前引用
    }
    static int j;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(j);

    }
}
